package dao;

import hibernateUtils.HibernateUtil;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import model.Sucursal;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;

import beans.SucursalBean;

public class HibernateSucursalDAO {
	private static HibernateSucursalDAO instancia;
	private static SessionFactory sf;

	private HibernateSucursalDAO() {

	}

	public static HibernateSucursalDAO getInstancia() {
		if (instancia == null) {
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateSucursalDAO();
		}
		return instancia;
	}

	public void grabarSurcursal(SucursalBean sucursalBean) {
		/* Abro sesion y grabo el objeto */
		Session sesion = sf.openSession();
		sesion.beginTransaction();
		sesion.persist(sucursalBean);
		sesion.flush();
		sesion.getTransaction().commit();
		sesion.close();
	}

	public void merge(SucursalBean sucursalBean) {
		Session sesion = sf.openSession();
		sesion.beginTransaction();
		sesion.merge(sucursalBean);
		sesion.flush();
		sesion.getTransaction().commit();
		sesion.close();

	}

	public List<SucursalBean> list() {
		Session sesion = sf.openSession();
		sesion.beginTransaction();
		Query query = sesion.createQuery("from SucursalBean");
		List<SucursalBean> sucursales = new ArrayList<SucursalBean>();
		sucursales = query.list();
		return sucursales;
	}

	public SucursalBean buscarSucursal(SucursalBean sb) {
		Session sesion = sf.openSession();
		SucursalBean sucursal = (SucursalBean) sesion.get(SucursalBean.class,
				sb.getIdSucursal());
		sesion.close();
		return sucursal;
	}

	public void update(SucursalBean s) {
		Session sesion = sf.openSession();
		sesion.beginTransaction();
		sesion.update(s);
		sesion.getTransaction().commit();
		sesion.flush();
		sesion.close();
	}

	public SucursalBean buscarSucursalxNombre(String sucursalDestino) {
		Sucursal sb = new Sucursal();
		sb.setNombre(sucursalDestino);
		Session sesion = sf.openSession();
		SucursalBean sucursal = (SucursalBean) sesion
				.createQuery("from SucursalBean where nombre = :nombreSuc")
				.setParameter("nombreSuc", sb.getNombre()).uniqueResult();
		sesion.close();
		return sucursal;
	}

	public void crearLog(String user, String accion) {
		Session sesion = sf.openSession();
		sesion.beginTransaction();
		sesion.createSQLQuery("insert into [restaurante].[dbo].[Logs] values(?,?,?)")
		.setTimestamp(0, new Date())
		.setString(1, user)
		.setString(2, accion).executeUpdate();
		sesion.flush();
		sesion.getTransaction().commit();
		sesion.close();
		
	}

}
